package com.one.pass.fegin;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import feign.Response;
import feign.codec.ErrorDecoder;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;

import java.util.UUID;
/*
PayConfirguration类实现了RequestInterceptor和ErrorDecoder接口，用于自定义Feign的请求和错误处理逻辑。
通过请求拦截器在每次请求之前添加必要的请求头信息。
通过错误解码器在请求发生错误时记录详细的错误信息，并抛出运行时异常。
*/

@Slf4j
public class PayConfirguration implements RequestInterceptor, ErrorDecoder {

    // Feign请求拦截器
    @Override
    public void apply(RequestTemplate template) {
        // 添加请求头 "X-KSY-KINGSTAR-ID" 和 "X-KSY-REQUEST-ID"
        template.header("X-KSY-KINGSTAR-ID", "30001 ");
        template.header("X-KSY-REQUEST-ID", UUID.randomUUID().toString());
    }

    // Feign错误解码器
    @SneakyThrows  // 使用lombok的SneakyThrows注解，自动处理受检异常
    @Override
    public Exception decode(String methodKey, Response response) {
        // 记录异常响应的消息体
        log.info("异常:" + new String(IOUtils.toByteArray(response.body().asInputStream())));
        return new RuntimeException("执行错误");
    }
}
